import pandas as pd
import csv


HEAD_MAX_LINE = 5000

file_path = "AL_TKQQ_TPWX_2023112219_data1.txt"
start_line = 5
# columns_header = []

# read_file_encoding = 'utf8'   # 原位火箭
read_file_encoding = 'GBK'      # 其他默认

def convert_file():
    fd = open(file_path, "r", encoding=read_file_encoding)
    lines = fd.readlines(HEAD_MAX_LINE)

    #1.跳过头部信息，并获取数据列表头
    pos = 0
    columns_header = []  # 探测数据列维度
    for line in lines:
        # 头部信息结束标记，即数据列表头信息
        if reachEndOfHeader(line.strip()):   # L0文件是Range行，L2文件是Altiude行
            # 头部信息最后一行，解析探测数据列头信息
            arr = line.strip().split()
            print(arr)
            for item in arr:
                if item.strip() != '':
                    columns_header.append(item)
            break
        pos += 1
    fd.close()
 

    #columns_to_read = ['高度(距地)', '气温', '气压', '湿度', '风向', '风速', '虚温']

    # 读取CSV文件
    df = pd.read_csv(file_path, skiprows=start_line, header=None, names=columns_header, sep=r'\s+', encoding=read_file_encoding)
    #df = pd.read_csv(file_path, skiprows=start_line, header=None, names=columns_header, sep=r'\s+', 
    #                encoding=read_file_encoding, usecols=columns_to_read)
    print(df.head())
    print(df.columns)

    # 读取CSV文件
    # df = pd.read_csv('your_file.csv')
 
    # 选择特定的列，例如我们选择第一列和第三列
    selected_col = ['高度(距地)', '气温', '气压', '湿度', '风向', '风速', '虚温']
    selected_columns = df[['高度(距地)', '气温', '气压', '湿度', '风向', '风速', '虚温']]
 
    # 打印选定的列
    print(selected_columns)


    # 将df输出到文本文件，使用制表符分隔
    selected_columns.to_csv('output.txt', sep='\t', index=False)

    # with open('output.txt', 'w') as f:
    #     f.write(selected_columns.to_csv(sep='\t', index=False))

    # with open('output.txt', 'w', newline='') as csvfile:
    #     writer = csv.writer(csvfile)
    #     # 写入表头（如果有需要的话）
    #     writer.writerow(selected_col)  # 这里假设输出的CSV文件只有一个标题“Column Data”
    #     # 写入指定列的数据
    #     writer.writerows(selected_columns)




def reachEndOfHeader(line):
    if line.strip().startswith('Range') or line.strip().startswith('Altiude') or line.strip().startswith('Altitude') or \
       line.strip().startswith('#End of Header') or line.strip().startswith('Rang') or \
            line.strip().startswith('Row_Number') or \
       line.strip().startswith('高度(距地)'):   # L0文件是Range行，L2文件是Altiude行；YC数据文件解析；原位气球是“高度(距地)”行
        return True
    else:
        return False



##################
convert_file()

